<?php
/**
 * This is the Component class for sending the json response ".
 */
class SendResponseComponent extends CApplicationComponent
{
    public function init() {
    }
   
 	public function send($status = 200, $body = '', $content_type = 'text/html') {
       $this->_sendResponse($status,$body,$content_type);
    }
    
    /**
	 * Sends the API response to client
	 * This is authenticate method checks username ans password set at the client end at header
	 * @param int $status
	 * @param string $body
	 * @param string $content_type
	 * @access private
	 * @return void
	 * @see <SendResponseComponent::send>
	 */
    
	private function _sendResponse($status = 200, $body = '', $content_type = 'text/html')
	{
		$status_header = 'HTTP/1.1 ' . $status . ' ' . Yii::app()->statusCodeMessage->get($status);
		// set the status
		header($status_header);
		// set the content type
		header('Content-type: ' . $content_type);

		// pages with body are easy
		if($body != '')
		{	
			if(Yii::app()->params['apiMode']=='live')
			{
			//echo $body;
			echo CJSON::encode($body);	
			}		
			if(Yii::app()->params['apiMode']=='test')
			{
			//echo CJSON::encode($body);		
			Yii::app()->user->setFlash('apierror',$body);
			}
		}
		// we need to create the body if none is passed
		else
		{
			// create some body messages
			$message = '';

			// this is purely optional, but makes the pages a little nicer to read
			// for your users.  Since you won't likely send a lot of different status codes,
			// this also shouldn't be too ponderous to maintain
			switch($status)
			{
				case 401:
					$message = 'You must be authorized to view this page.';
					break;
				case 404:
					$message = 'The requested URL ' . $_SERVER['REQUEST_URI'] . ' was not found.';
					break;
				case 500:
					$message = 'The server encountered an error processing your request.';
					break;
				case 501:
					$message = 'The requested method is not implemented.';
					break;
			}

			// servers don't always have a signature turned on (this is an apache directive "ServerSignature On")
			$signature = ($_SERVER['SERVER_SIGNATURE'] == '') ? $_SERVER['SERVER_SOFTWARE'] . ' Server at ' . $_SERVER['SERVER_NAME'] . ' Port ' . $_SERVER['SERVER_PORT'] : $_SERVER['SERVER_SIGNATURE'];

			// this should be templatized in a real-world solution
			$body = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
                        <html>
                            <head>
                                <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
                                <title>' . $status . ' ' .Yii::app()->statusCodeMessage->get($status). '</title>
                            </head>
                            <body>
                                <h1>' . $status . ' '.Yii::app()->statusCodeMessage->get($status). '</h1>
                                <p>' . $message . '</p>
                                <hr />
                                <address>' . $signature . '</address>
                            </body>
                        </html>';

			//echo $body;
			echo CJSON::encode($body);
			exit;
		}
	}
}